
// import { Asset, Component, Prefab, SpriteFrame, Texture2D, _decorator } from "cc";
// import { EventMgr } from "../manager/EventMgr";
// import { ResCacheMgr } from "../manager/ResCacheMgr";
// import { CompleteCallback, ResCache, ResCacheKey, ResourceMgr } from "../manager/ResourceMgr";
// const { ccclass, property } = _decorator;
// @ccclass('BaseCtrl')
// export default class BaseCtrl extends Component {
//     @property({ displayName: "是否需要缓存资源" })
//     cache: boolean = false;
//     private resArray: ResCacheKey[] = []
//     private eventList: Array<Map<string, Function>> = [];
//     protected isDestroy: boolean = false;
//     onLoad() {

//     }
//     /*
//     * 添加监听的事件
//     * @param listenename 事件名
//     * @param fun 响应的方法
//     */
//     protected addEvent(listenename: string, fun: Function) {
//         EventMgr.getInstance().on(listenename, this, fun);
//         let map: Map<string, Function> = new Map();
//         map.set(listenename, fun);
//         this.eventList.push(map);
//     }
//     /**
//      * 发送事件
//      * @param listenerName 事件名称
//      * @param param1
//      * @param param2
//      * @param param3
//      * @param param4
//      * @param param5
//      */
//     protected sendEvent(listenerName: string, param1?: any, param2?: any, param3?: any, param4?: any, param5?: any) {
//         EventMgr.getInstance().emit(listenerName, param1, param2, param3, param4, param5);
//     }


//     /**
//   * 加载图片 界面关闭后自动释放
//   * @param bundleName
//   * @param path
//   * @param callback
//   * @param autoRelese 界面关闭后自动释放资源  默认为true
//   * @param cacheTime 缓存时间
//   */
//     protected loadSpriteFrame(bundleName: string, path: string, callback: CompleteCallback, autoRelese: boolean = true, cacheTime: number = 10) {
//         ResourceMgr.getInstance().loadSpriteframe(bundleName, path, (res: SpriteFrame) => {
//             if (autoRelese) {
//                 this.addRes(bundleName, path, SpriteFrame)
//             }
//             if (this.isDestroy) {
//                 return;
//             }
//             callback(res)
//         }, autoRelese, cacheTime)
//     }


//     /**
//     * 加载远程图片
//     * @param url   图片URL 小游戏需要在后台添加URL域名白名单
//     * @param callback
//     * @param autoRelese 关闭界面后是否自动释放 默认false
//     * @param cacheTme   缓存时间
//     * @returns
//     */
//     protected loadRemoteSpriteFrame(url: string, callback: CompleteCallback, autoRelese: boolean = true, cacheTime: number = 10) {
//         ResourceMgr.getInstance().loadRemoteSpriteFrame(url, (res: SpriteFrame) => {
//             if (autoRelese) {
//                 this.addRes('', url, SpriteFrame)
//             }
//             if (this.isDestroy) {
//                 return;
//             }
//             callback(res)
//         }, autoRelese, cacheTime)
//     }


//     /**
//     * 加载预制体 界面关闭后自动释放
//     * @param bundleName assets bundle的名称
//     * @param path
//     * @param callback
//     * @param autoRelese 界面关闭后自动释放资源  默认为true
//     */
//     protected loadPrefab(bundleName: string, path: string, callback: CompleteCallback, autoRelese: boolean = true, cacheTime: number = 10) {
//         ResourceMgr.getInstance().loadRes(bundleName, path, Prefab, (res: Prefab) => {
//             if (autoRelese) {
//                 this.addRes(bundleName, path, Prefab)
//             }
//             if (this.isDestroy) {
//                 return;
//             }
//             callback(res)
//         }, autoRelese, cacheTime)
//     }

//     /**
//       * 加载纹理 界面关闭后自动释放
//       * @param bundleName assets bundle的名称
//       * @param path
//       * @param callback
//       * @param autoRelese 界面关闭后自动释放资源  默认为true
//       */
//     protected loadTexture2D(bundleName: string, path: string, callback: CompleteCallback, autoRelese: boolean = true, cacheTime: number = 10) {
//         ResourceMgr.getInstance().loadRes(bundleName, path, Texture2D, (res: Texture2D) => {
//             if (autoRelese) {
//                 this.addRes(bundleName, path, Texture2D)
//             }
//             if (this.isDestroy) {
//                 return;
//             }
//             callback(res)
//         }, autoRelese, cacheTime)
//     }


//     /**
//      * 从指定的assets bundle加载资源
//      * @param bundleName assets bundle的名称
//      * @param path
//      * @param callback
//      * @param autoRelese 界面关闭后自动释放资源  默认为true
//      */
//     protected loadResFromBundle(bundleName: string, path: string, type: typeof Asset, callback: CompleteCallback, autoRelese: boolean = true, cacheTime: number = 10) {
//         ResourceMgr.getInstance().loadRes(bundleName, path, type, (res: typeof type) => {
//             if (autoRelese) {
//                 this.addRes(bundleName, path, type)
//             }
//             if (this.isDestroy) {
//                 return;
//             }
//             callback(res)
//         }, autoRelese, cacheTime)
//     }

//     /**
//    * 从resources文件夹下获取资源
//    * @param path 资源路径
//    * @param callback
//    */
//     protected loadFromRes(path: string, type: typeof Asset, callback: CompleteCallback, cacheTime: number = 10) {
//         ResourceMgr.getInstance().loadFromRes(path, type, (res: Asset) => {
//             this.addRes('', path, type)
//             if (this.isDestroy) {
//                 return;
//             }
//             callback(res)
//         })
//     }


//     private addRes(bundle: string, path: string, type: typeof Asset) {
//         if (!this.resArray) return
//         let existId = ResCacheMgr.getInstance().isExistKey(bundle + "/" + path, type.name, this.resArray);
//         if (existId != -1) {
//             if (!this.resArray[existId].defCount) this.resArray[existId].defCount = 0
//             this.resArray[existId].defCount++;
//         } else {
//             let obj = new ResCacheKey(bundle, path, type);
//             this.resArray.push(obj)
//         }
//     }

//     private release() {
//         //释放动态加载的资源
//         if (!this.cache && this.resArray) {
//             ResCacheMgr.getInstance().refreshTime(this.resArray)
//             this.resArray = []
//         }
//     }


//     setListenerUI() { }
//     onDestroy() {
//         //去除监听的事件
//         if (this.eventList && this.eventList.length > 0) {
//             for (let i = 0; i < this.eventList.length; i++) {
//                 let event = this.eventList[i]
//                 event.forEach((fun: Function, name: string) => {
//                     EventMgr.getInstance().off(name, this, fun);
//                 })

//             }
//             this.eventList = null;
//         }
//         this.isDestroy = true;
//         this.release();
//     }


// }
